/*
 * Copyright (C), 2020, 安徽艾伦家居饰品有限公司
 * FileName: ApiControllerImpl
 * Author:   Allen
 * Date:     2020/8/19
 * Description: API接口rest接口
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.haoyu.auth.rest.controller;

import com.haoyu.auth.core.entity.ApiDO;
import com.haoyu.auth.core.service.impl.ApiServiceImpl;
import com.haoyu.auth.core.service.impl.RefreshApiServiceImpl;
import com.haoyu.common.core.enums.CodeEnum;
import com.haoyu.common.core.model.dto.ResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import springfox.documentation.annotations.ApiIgnore;

import java.util.List;

import static com.haoyu.auth.client.constant.AuthServiceConstant.AUTH_SERVER;

/**
 * API接口rest接口
 * @deprecated
 * <p>
 *  考虑到swagger已经非常方便了，无须再通过swagger持久化到数据库中，故而后期此项将移除。
 * </p>
 * @author Allen
 * @date 2020/8/19
 */
@Slf4j
@ApiIgnore
@Controller
@Deprecated
@RequestMapping("/api")
@SessionAttributes("serviceList")
public class ApiController {

    /**
     * apiService注入
     */
    @Autowired
    private ApiServiceImpl apiService;

    /**
     * RefreshApiService注入
     */
    @Autowired
    private RefreshApiServiceImpl refreshApiService;

    /**
     * 获取每一个服务下面实例
     * 测试时，可以使用多个端口启动服务实例
     */
    @Autowired
    private DiscoveryClient discoveryClient;

    /**
     * Api接口列表(刷新API接口时，直接进行缓存，故而此处不进行分页处理，采用前端分页)
     * @param serviceId  服务编码
     * @param model  model
     * @return 接口列表
     */
    @GetMapping("/list")
    public String apiService(Model model, String serviceId) {
        List<ApiDO> apiDOList = apiService.listApi(serviceId == null ? AUTH_SERVER : serviceId);
        model.addAttribute("apiList", apiDOList);
        return "api/api_service";
    }

    /**
     * 自动刷新API服务信息接口
     * @param serviceId 服务ID
     * @return 数据刷新是否成功
     */
    public ResultVO<Boolean> autoRefreshApi(String serviceId) {
        Boolean success = refreshApiService.refreshListApi(serviceId);
        if (!success) {
            return ResultVO.fail(CodeEnum.DATA_NOT_FOUND);
        }
        return ResultVO.ok();
    }

    /**
     * <p>
     * 获取服务列表
     * </P>
     *
     * @return Map
     */
    public ResultVO<List<String>> listServiceName() {
        List<String> services = discoveryClient.getServices();
        return ResultVO.ok(services);
    }
}
